#include <iostream>
#include <fstream>
#include <unordered_map>
#include <string>

// 从配置文件读取配置到unordered_map
void readDatabaseConfig(const std::string& filename, std::unordered_map<std::string, std::string>& configMap) {
    std::ifstream file(filename);
    std::string line;
    while (std::getline(file, line)) {
        size_t pos = line.find(':');
        if (pos != std::string::npos) {
            std::string key = line.substr(0, pos);
            std::string value = line.substr(pos + 1);
            configMap[key] = value;
        }
    }
    file.close();
}

// 对比两个数据库配置的差异并输出
void compareDatabaseConfigs(const std::unordered_map<std::string, std::string>& config1,
                          const std::unordered_map<std::string, std::string>& config2) {
    // 检查config1中有而config2中没有的配置项
    for (const auto& item : config1) {
        if (config2.find(item.first) == config2.end()) {
            std::cout << "配置1中有，配置2中没有的项: " << item.first << ":" << item.second << std::endl;
        }
    }

    // 检查config2中有而config1中没有的配置项
    for (const auto& item : config2) {
        if (config1.find(item.first) == config1.end()) {
            std::cout << "配置2中有，配置1中没有的项: " << item.first << ":" << item.second << std::endl;
        }
    }

    // 检查两个配置中键相同但值不同的配置项
    for (const auto& item : config1) {
        auto it = config2.find(item.first);
        if (it != config2.end() && it->second != item.second) {
            std::cout << "键相同但值不同的项: " << item.first << " 在配置1中的值是 " << item.second
                      << "，在配置2中的值是 " << it->second << std::endl;
        }
    }
}

int main() {
    std::unordered_map<std::string, std::string> config1;
    std::unordered_map<std::string, std::string> config2;

    // 读取两个数据库配置文件
    readDatabaseConfig("config1.txt", config1);
    readDatabaseConfig("config2.txt", config2);

    // 对比两个数据库配置
    compareDatabaseConfigs(config1, config2);

    return 0;
}